package com.hua.designpattern.structural.decorator;

/**
 * 
 * @author joshua
 * 
 *         <pre>
 * 
 * 动态地给一个对象添加一些额外的职责。就增加功能来说，装饰器模式相比生成子类更为灵活。
 * 
 * 优点：装饰类和被装饰类可以独立发展，不会相互耦合，装饰模式是继承的一个替代模式，装饰模式可以动态扩展一个实现类的功能。
 * 缺点：多层装饰比较复杂。
 * 
 *         </pre>
 *
 */
public class TestDecorator {
	public static void main(String[] args) {

		Shape circle = new Circle("circle 1");
		Shape shapeDecorator1 = new ShapeDecoratorDrawBlue(circle);
		Shape shapeDecorator2 = new ShapeDecoratorDrawRed(circle);
		circle.draw();
		System.out.println("------------------------");
		shapeDecorator1.draw();
		System.out.println("------------------------");
		shapeDecorator2.draw();
	}
}
